# 数组个数(不懂)
"""
摘抄deepseek解析如下:
状态定义：
dp[k][x][y] 表示处理到第 k 个元素时，前两个元素的某些特征（如最大值）为 x 和 y 的状态数。
转移条件：
每个新元素必须满足 max(x, y, z) == num[k-1]，确保当前元素是前三个中的最大值。
首尾约束：
最后一步额外检查首尾元素的关系，可能是题目要求的闭合条件（如环形序列或首尾关联）。
"""

n = int(input())
num = list(map(int, input().split()))
dp = [[[0 for i in range(11)] for j in range(11)] for _ in range(n)]
ans = 0
for i in range(11):
    for j in range(11):
        for k in range(n):
            for l in range(11):
                for m in range(11):
                    dp[k][l][m] = 0
        dp[1][i][j] = 1
        for k in range(2, n):
            for x in range(11):
                for y in range(11):
                    if dp[k - 1][x][y] == 0: continue
                    for z in range(11):
                        if k == n - 1:
                            if max(x, y, z) == num[k - 1] and max(y, z, i) == num[k] and max(z, i, j) == num[0]:
                                dp[k][y][z] += dp[k - 1][x][y]
                                dp[k][y][z] %= 1000000007
                        elif max(x, y, z) == num[k - 1]:
                            dp[k][y][z] += dp[k - 1][x][y]
                            dp[k][y][z] %= 1000000007
        for k in range(11):
            for l in range(11):
                ans = (ans + dp[n - 1][k][l]) % 1000000007
print(ans)
